package ec.edu.ups.relevo.vista.controlador;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.validation.constraints.AssertTrue;

import ec.edu.ups.relevo.datos.dao.RolDAO;
import ec.edu.ups.relevo.datos.dao.UsuarioDAO;
import ec.edu.ups.relevo.datos.modeloBD.Rol;
import ec.edu.ups.relevo.datos.modeloBD.Usuario;
import ec.edu.ups.relevo.datos.modeloBD.UsuarioRol;

@ManagedBean
@ViewScoped
public class UsuariosBean {
	@Inject UsuarioDAO usrsdao;
	@Inject RolDAO roldao;
	
	private Usuario usr;
	private List<Usuario> listUsrs;
	private List<Rol> listRolesDisponibles;
	private List listRoles;

	
	@PostConstruct
	public void init()
	{
		usr= new Usuario();	
		listRolesDisponibles=roldao.listar();
		listRoles=new ArrayList();
	} 
	
	
	
	/**
	 *Encapsulacion de atributos 
	 */
	public Usuario getUsr() {return usr;}
	public void setUsr(Usuario usr) {	
		System.out.println("Seteando usuario"+usr.getId());
		usr=usrsdao.readAll(usr.getId());
		
		for(UsuarioRol r:usr.getUsr_roles())
		
			this.listRoles.add(r.getRoles().getId());
		
		this.usr = usr;	}
	
	public List<Usuario> getListUsrs() {return listUsrs= usrsdao.listarSinEliminados();	}
	public void setListUsrs(List<Usuario> listUsrs) {this.listUsrs = listUsrs;	}
	
	public List getListRoles() {return listRoles;}
	public void setListRoles(List listRoles) {this.listRoles = listRoles;}

	public List<Rol> getListRolesDisponibles() {return listRolesDisponibles;}
	public void setListRolesDisponibles(List<Rol> listRolesDisponibles) {this.listRolesDisponibles = listRolesDisponibles;}


	public String guardar() 
	{
		System.out.println("Guardando\n"+usr.toString());
		if(usr.getPassword().equals(usr.getConfirmarPassword())==false)
		{	mostrarMensaje("Error", "Las contrasenas ingresadas no coinciden.");
			return null;
		}
		listRoles=listRoles==null?new ArrayList():listRoles;//si es nulo crea uno en blanco
		if(listRoles.size()==0)
		{	mostrarMensaje("Error", "Debe seleccionar al menos un rol.");
			return null;
		}
		List<UsuarioRol> uroles=new ArrayList<UsuarioRol>();
		for(Object r:listRoles)
		{
			UsuarioRol ur=new UsuarioRol();
			ur.setUsuario(usr);
			ur.setRoles(this.roldao.read(Long.parseLong(r.toString())));
			uroles.add(ur);
		}	
		if(usrsdao.read(usr.getId())==null)
		{			
			System.out.println("guardar");
			usr.setUsr_roles(uroles);
			usrsdao.create(usr);
		
		}
		else
		{
			System.out.println("atualizar");

			usrsdao.quitarRoles(usr);
			usr.setUsr_roles(uroles);
			usrsdao.update(usr);
		}

		
		mostrarMensaje("Exito!", "Usuario registrado exitosamente...");
		usr= new Usuario();
		return null;
	}
	
	public String seleccionarUsuarios(Usuario usrsel)
	{
		System.out.println("seleccionando usuario");
		this.setUsr(usrsel);
		
		return null;
	}
	
	public String eliminarUsuario()
	{
		System.out.println("intentando eliminar");
		try{
			if(usr!=null)
			{
				System.out.println("Eliminar"+ usr.getNombre());
				usr.setEliminado(true);
				usrsdao.update(usr);
				usr=new Usuario();
			}
			else System.out.println("Nulo");
		}catch (Exception e) 
		{
			e.printStackTrace();
		}
		return null;	
	}
	
	
	private void mostrarMensaje(String titulo,String mensaje)
	{
	   	 
		FacesContext context = FacesContext.getCurrentInstance();


        
	}
	
	
	
}
